package com.sanqing.iframe;

import com.sanqing.dao.Dao;
import com.sanqing.main.*;
import com.sanqing.model.Operater;

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

//登录窗体界面
public class BookLoginIFrame extends JFrame {
    private final JTextField username;
    private final JPasswordField password;

    public BookLoginIFrame() {
        super();
        Toolkit tk = Toolkit.getDefaultToolkit();
        java.awt.Image img = tk.getImage("images/icon.png");
        setIconImage(img);
        final BorderLayout borderLayout = new BorderLayout();   //创建布局管理器
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         //关闭按钮处理事件
        borderLayout.setVgap(10);                               //设置组件之间垂直距离
        getContentPane().setLayout(borderLayout);               //使用布局管理器
        setTitle("欢迎使用本图书管理系统");                              //设置窗体标题
        Toolkit tool = Toolkit.getDefaultToolkit();             //获得默认的工具箱
        Dimension screenSize = tool.getScreenSize();            //获得屏幕的大小
        setSize(380, 320);                                       //设置窗体大小
        setLocation((screenSize.width - getWidth()) / 2, (screenSize.height - getHeight()) / 2); //设置窗体位置 居中

        final JPanel mainPanel = new JPanel();          //创建主面板
        mainPanel.setLayout(new BorderLayout());        //设置边框布局
        mainPanel.setBorder(new EmptyBorder(0, 0, 0, 0));  //设置边框为0
        getContentPane().add(mainPanel);                //在窗体中加入主面板

        final JLabel imageLabel = new JLabel();                     //创建一个标签，用来显示图片
        ImageIcon loginIcon = new ImageIcon("images/login.png");        //创建一个图像图标
        imageLabel.setIcon(loginIcon);                              //设置图片
        imageLabel.setOpaque(false);                                 //设置绘制其边界内的所有像素
        imageLabel.setBackground(Color.WHITE);                      //设置背景颜色
        imageLabel.setPreferredSize(new Dimension(150, 150));//设置标签大小
        imageLabel.setLocation(50, 0);
        mainPanel.add(imageLabel, BorderLayout.NORTH);               //添加标签到主面板

        final JPanel centerPanel = new JPanel();                    //添加一个中心面板
        final GridLayout gridLayout = new GridLayout(2, 2);          //创建网格布局管理器

        gridLayout.setHgap(5);                                      //设置组件之间平行距离
        gridLayout.setVgap(10);                                     //设置组件之间垂直距离
        centerPanel.setLayout(gridLayout);                          //使用布局管理器
        mainPanel.add(centerPanel, BorderLayout.EAST);                                 //添加到主面板
        final JLabel userNameLabel = new JLabel();                    //创建用户名标签
        userNameLabel.setHorizontalAlignment(SwingConstants.RIGHT);//设置对齐方式
        userNameLabel.setPreferredSize(new Dimension(0, 0));//设置组件大小
        userNameLabel.setMinimumSize(new Dimension(0, 0));//设置组件大小的最小值
        centerPanel.add(userNameLabel);                             //添加到中心面板
        userNameLabel.setText("用户名:");                           //设置标签文本
        userNameLabel.setFont(new Font("宋体", Font.PLAIN, 25));
        username = new JTextField(20);                     //创建用户名文本框
        username.setPreferredSize(new Dimension(0, 0));//设置组件大小
        username.setFont(new Font("宋体", Font.PLAIN, 25));

        centerPanel.add(username);                                 //添加到中心面板
        final JLabel passwordLabel = new JLabel();                 //创建密码标签
        passwordLabel.setHorizontalAlignment(SwingConstants.RIGHT);//设置对齐方式
        centerPanel.add(passwordLabel);                            //添加到中心面板
        passwordLabel.setText("密  码:");//设置标签文本
        passwordLabel.setFont(new Font("宋体", Font.PLAIN, 25));
        password = new JPasswordField(20);                //创建密码框
        password.setFont(new Font("宋体", Font.PLAIN, 25));
        //password.setDocument(new do);   // 设置密码长度为6
        final JPanel southPanel = new JPanel();                 //新增一个底部面板
        mainPanel.add(southPanel, BorderLayout.SOUTH);           //添加到主面板中
        JButton login = new JButton();                                  //创建按钮组件
        login.addActionListener(new BookLoginAction());         //添加监听器
        login.setText("登录");                                   //设置按钮文本
        southPanel.add(login);                                  //把按钮添加到底部面板
        password.setEchoChar('*');                                //设置密码框的回显字符
        login.setFont(new Font("宋体", Font.PLAIN, 25));
        password.addKeyListener(new KeyAdapter() {                //监听密码框
            public void keyPressed(final KeyEvent e) {            //监听键盘单击事件
                if (e.getKeyCode() == 10)                           //按了回车键
                {
                    login.doClick();                             //进行登录
                }
            }
        });
        centerPanel.add(password);                              //添加到中心面板

        JButton reset = new JButton();                                  //创建按钮组件
        //reset.addActionListener(new BookResetAction());         //添加监听器

        reset.setText("重置");                                   //设置按钮文本
        reset.setFont(new Font("宋体", Font.PLAIN, 25));
        reset.addActionListener(new ResetTextFiled());
        southPanel.add(reset);                                  //把按钮添加到底部面板
        setVisible(true);                                       //设置创建可见
        setResizable(false);                                    //设置窗体不可改变大小
    }

    //* 登录窗体登录监听器


    private class BookLoginAction implements ActionListener {
        public void actionPerformed(final ActionEvent e) {
            Operater user = Dao.check(username.getText(), new String(password.getPassword()));    //调用DAO方法
            if (user.getName() != null) {   //判断用户名是否为null
                try {
                    Library frame = new Library(user);      //创建一个主窗体
                    frame.setVisible(true);//设置其可见
                    BookLoginIFrame.this.setVisible(false); //设置登录窗体为不显示
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            } else {
                JOptionPane.showMessageDialog(null,
                        "用户名或密码错误!");       //弹出提示框
                username.setText("");   //设置用户名输入框为空
                password.setText("");   //设置密码输入框为空
            }
        }
    }

    private class ResetTextFiled implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            username.setText("");
            password.setText("");
        }
    }
}
